//
// Created by ZYZ on 2020/6/17.
//

#ifndef TESTALGORITHM_LINKED_QUEUE_H
#define TESTALGORITHM_LINKED_QUEUE_H

#include "../../include/type_linked_queue.h"

//构造一个空队列 Q
Status InitQueue (LinkQueue &Q);

//销毁队列 Q, Q 不再存在 Status Clearqueue (LinkQueue &0)
//将 Q 清为空队列
Status DestroyQueue(LinkQueue &Q);

//清空队列
Status ClearQueue(LinkQueue &Q);

//若队列 Q 为空队列，则返回 TRUE，否则返回 FALSE
Status QueueEmpty(LinkQueue Q);

//返回 Q 的元素个数，即为队列的长度
int QueueLength(LinkQueue Q);

Status GetHead(LinkQueue Q, QElemType &e);
//若队列不空，则用 e 返回 Q 的队头元素，并返回 OK；否则返回 ERC

//插人元素 e 为 Q 的新的队尾元素
Status EnQueue(LinkQueue &Q, QElemType e);

//若队列不空，则删除 Q 的队头元素，用 e 返回其值，并返回 OK;
//否则返回 ERROR
Status DeQueue  (LinkQueue &Q, QElemType &e);

//从队头到队尾依次对队列 Q 中每个元素调用函数 visit（）。一且 visit 失败，则操作失败
Status QueueTraverse (LinkQueue Q, Status  (* visit) (QElemType e));

#endif //TESTALGORITHM_LINKED_QUEUE_H
